//
//  WJHomeVC.swift
//  新浪微博swift
//
//  Created by WJ-Jason on 2017/5/1.
//  Copyright © 2017年 WJ-Jason. All rights reserved.
//

import UIKit

// 定义全局常量,尽量使用 private修饰 否则到处都可以访问 使用private后仅在当前文件内可以访问
// 原创微博可重用 cell id
private let originalcellID = "cellID"
// 被转发微博的可重用 cell id
private let retweetedCellID = "retweetedCellId"

class WJHomeVC: WJBaseVC {
    
    //列表数据模型
    fileprivate lazy var listViewModel = WJStatusListViewModel()
    
    //微博数据数组
    fileprivate lazy var statusList = [String]()
    
    override func loadData() {
        
        print("准备刷新")
        
        // Xcode 8.0 的刷新控件，beginRefreshing 方法，什么都不显示！
        refreshControl?.beginRefreshing()
        
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) {
            self.listViewModel.loadStatus(pullup: self.isPullup) { (isSuccess, shouldRefresh) in
                
                print("加载数据结束)")
                // 结束刷新控件
                self.refreshControl?.endRefreshing()
                // 恢复上拉刷新标记
                self.isPullup = false
                
                // 刷新表格
                if shouldRefresh {
                    self.tableView?.reloadData()
                }
            }

        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    @objc func showFriends () {
        print(#function)
        
//        let vc = WJMessageVC()
//        vc.view.backgroundColor = UIColor.red
////        vc.hidesBottomBarWhenPushed = true // hidesBottomWhenPushed 隐藏底部bar当他Push的时候
//        navigationController?.pushViewController(vc, animated: true)
    }

}


// MARK: - 表格数据源方法
extension WJHomeVC {
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return listViewModel.statusList.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // 0. 取出视图模型，根据视图模型判断可重用 cell
        let vm = listViewModel.statusList[indexPath.row]
        
        let cellId = (vm.status.retweeted_status != nil) ? retweetedCellID : originalcellID
        
        // 1. 取 cell - 本身会调用代理方法(如果有)
        // 如果没有，找到 cell，按照自动布局的规则，从上向下计算，找到向下的约束，从而计算动态行高
        let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! WJStatusCell
        
        // 2. 设置 cell
        cell.viewModel = vm
        
        // --- 设置代理 ---
        // 如果用 block 需要在数据源方法中，给每一个 cell 设置 block
        // cell.completionBlock = { // ... }
        // 设置代理只是传递了一个指针地址
        cell.delegate = self
        
        // 3. 返回 cell
        return cell

    }
    
    // 父类必须实现代理方法, 子类才能重写, Swift 3.0才是如此 2.0不需要
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        // 1. 根据indexPath 获取视图模型
        let vm = listViewModel.statusList[indexPath.row]
        
        // 2. 返回计算好的行高
        return vm.rowHeight
    }
}

// MARK: - WJStatusCellDelegate
extension WJHomeVC : WJStatusCellDelegate {
    func statusCellDidSelectedURLString(cell: WJStatusCell, urlString: String) {
        let vc = WJWebVC()
        
        vc.urlString = urlString
        
        navigationController?.pushViewController(vc, animated: true)
    }
}

// MARK: - 设置界面
extension WJHomeVC {
    
    /// 重写父类的方法
    internal override func setupTableView() {
        super.setupTableView()
        
        setupNavTitle()
        
        view.backgroundColor = UIColor.yellow
        //设置导航栏按钮
        let btn = UIButton(title: "好友", fontSize: 16, normalColor: UIColor.darkGray, highlightedColor: UIColor.orange)

        navItem.leftBarButtonItem = UIBarButtonItem(customView: btn)
        btn.contentHorizontalAlignment = .left
        btn.frame = CGRect(x: 0, y: 0, width: 100, height: 50)
        
        btn.addTarget(self, action: #selector(showFriends), for: .touchUpInside)
     
        // 注册原型cell
//        tableView?.register(UITableViewCell.self, forCellReuseIdentifier: cellID)
        
        tableView?.register(UINib(nibName: "WJStatusNormalCell", bundle: nil), forCellReuseIdentifier: originalcellID)
        tableView?.register(UINib(nibName: "WJStatusRetweetedCell", bundle: nil), forCellReuseIdentifier: retweetedCellID)
        
//        tableView?.rowHeight = UITableViewAutomaticDimension
        tableView?.estimatedRowHeight = 300 //预估行高
        
        // 取消分割线
        tableView?.separatorStyle = .none
    }
    
    /// 设置导航栏标题
    private func setupNavTitle() {
        
        let title = WJNewworkManager.shared.userAccount.screen_name
        
        let button = WBTitleButton(title: title)
        
        navItem.titleView = button
        
        button.addTarget(self, action: #selector(clickTitleButton), for: .touchUpInside)
    }
    
    @objc func clickTitleButton(btn: UIButton) {
        
        // 设置选中状态
        btn.isSelected = !btn.isSelected
    }

}



